1. The Field of the Invention
The present invention relates to mechanisms for facilitating software programming; and more specifically, to simplifying the programming process by using managed code that hides much of the complexity of hierarchically-structured data when communicating using the hierarchically-structured data.
2. Related Technology
Computing technology has transformed the way we work and play. Computers consist of hardware components such as for, example, processors and memory capability. However, much of the utility of a typical general-purpose computing system is derived from the capabilities of the software that is available to the computing system, whether that software is locally available, or whether that software is accessed remotely over a network.
Software includes computer-executable instructions that are executed by a processor to thereby cause the processor to control various functions of the computing system. Modern computing systems may perform an extensive variety of complex actions depending on what the computer-executable instructions tell the processor to do. At the lowest physical level of the computing system as viewed from the processor perspective, the computer-executable instructions are essentially a string of one's and zero's that conform to an instruction set that is recognized by the processor. These processor-level instructions are often referred to as “binaries” or “binary instructions”.
While binaries are quickly interpretable by processors, they are less intuitive to human beings. Accordingly, software programs are not initially drafted using binary instructions. Instead, software programs are typically first drafted using a more intuitive, human-readable language called “source code.” For example, VISUAL BASIC, C++ and DB.NET are all languages used for drafting source code, each containing many words that are adopted from the English language, letters that are taken from the familiar Latin-based alphabet, and mathematical numbers and symbols that are commonly accepted for human expressions of mathematical concepts. While source code is interpretable by human beings, processors (and computer systems) need binary instructions in order to function properly.
Some software, such as compilers and interpreters, convert source code to corresponding binary instructions that perform the same functionality (when executed by a processor) as was represented by the source code. Accordingly, source code allows for human programmers to author programs that would otherwise not be possible. While source code facilitates programming and is typically readable by programmers with sufficient training, source code can still be quite difficult to draft especially for complex programs.
Program complexity is often measured in terms of “lines of code”. Many programs number in the thousands of lines of code. Accordingly, even with the most skilled of programmers, there are often initially errors in the source code that prohibit successful compilation. Even when these errors are discovered and corrected resulting in successful compilation, there are often unintended functionality (often referred to as “bugs”) that are present in the program. The difficulty in compiling a program, and the probability of introducing unintended functionality into the program, tends to increase the more the lines of code there are in the program. Accordingly, methods have been developed to manage code to thereby simplify the source code needed to accomplish given functionality.
One conventional way of doing this is to organize functional components of the program into segments often referred to as “objects”. These objects have corresponding properties and corresponding methods that may be invoked. Objects may communicate using standards called Application Program Interfaces (APIs). Objects may communicate locally or even remotely over a network using APIs.
For example, recently, the use of eXtenstible Markup Language (XML) has become more accepted as a way to communicate between objects. When remotely communicating over a network, sometimes Simple Object Access Protocol (SOAP) is used as a mechanism to transport an XML document between different network sites. According to convention, the XML document may be transmitted as an XML document within the body portion of a SOAP envelope.
XML is useful partly because of its organization as a hierarchically-structured tree of nodes, each node comprising a tag that may contain descriptive attributes. XML is also useful because of its ability to follow extendable patterns that may be dictated by the underlying data being described. For example, a contact may have one pattern or schema, while a calendar entry may have a very different pattern or schema. As the need to describe certain aspects of these items arises, the pattern may be extended to include nodes that describe such aspects of the item. Accordingly, XML is gaining acceptance as a method for communicating data.
Some APIs involve the manipulation of XML documents following a particular schema. Because of the wide variety of items that may be described using XML, there are a wide variety of XML schemas. In can be relatively difficult for many programmers to keep track of the structure of a particular schema when they desire to draft code that manipulates a data item that is described by the XML document. There may also be other intricacies of an API that involves operations on XML documents. For example, perhaps only portions of the XML may be operated on as an atomic entity. Adding to the complexity, perhaps it is necessary not only to track changes to the XML document as a whole, but perhaps to each atomic portion of the XML document that may be separately operated upon. Thus, it can be a difficult task for many programmers to deal directly with the hierarchically-structured XML document.